package com.skivingcloud.report.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
import com.skivingcloud.report.dto.DataSetDto;
import com.skivingcloud.report.dto.DataSourceDto;
import com.skivingcloud.report.entity.ReportDataSource;
import com.skivingcloud.common.utils.PageParameter;

import java.util.List;
import java.util.Map;

/**
 * 数据源管理 服务层。
 *
 * @author skivingcloud
 * @since 2024-09-12
 */
public interface ReportDataSourceService extends IService<ReportDataSource> {
    /**
     * 分页查询数据源管理
     *
     * @param parameter 查询参数
     * @return 分页查询结果
     */
    Page<ReportDataSource> queryByPage(PageParameter<ReportDataSource> parameter);

    /**
     * 测试数据源连接
     * @param reportDataSource 数据源信息
     * @return 结果
     */
    Boolean testConnect(ReportDataSource reportDataSource) throws JsonProcessingException;

    /**
     * 执行sql,统计数据total
     * @param dataSourceDto 数据源
     * @param param 参数
     * @return 数量
     */
    long total(DataSourceDto dataSourceDto, DataSetDto param) throws JsonProcessingException;

    /**
     * 执行sql
     * @param dataSourceDto 数据源
     * @return 结果
     */
    List<Map<String, Object>> execute(DataSourceDto dataSourceDto) throws JsonProcessingException;
}
